"""
@staticmethod 是一个装饰器，用于定义静态方法。静态方法是一种特殊的方法，它不属于类的实例，也不属于类本身，
而是属于类的命名空间。静态方法不需要访问实例 (self) 或类 (cls) 的属性，因此它们通常用于执行与类相关的操作，但不依赖于类或其实例的状态。

-  使用 @staticmethod 装饰器来定义静态方法。静态方法通常用于执行一些与类相关但不依赖于类实例的操作

与类方法的区别
类方法 (@classmethod)：
- 接收第一个参数 cls，表示类本身。
- 可以访问和修改类的状态。
- 通常用于替代构造函数或处理类级别的数据。
静态方法 (@staticmethod)：
- 不接收 self 或 cls 参数。
- 不能访问实例属性或类属性。
- 通常用于执行与类相关的操作，但不依赖于类或其实例的状态。
"""


# 1. 示例
class MathUtils:
    @staticmethod
    def add(a, b):
        """返回两个数的和。"""
        return a + b

    @staticmethod
    def multiply(a, b):
        """返回两个数的乘积。"""
        return a * b


# 通过类名调用静态方法
result1 = MathUtils.add(3, 5)
print(result1)  # 输出: 8

result2 = MathUtils.multiply(4, 6)
print(result2)  # 输出: 24

# 也可以通过实例调用静态方法
math_instance = MathUtils()
result3 = math_instance.add(3, 5)
print(result3)  # 输出: 8

result4 = math_instance.multiply(4, 6)
print(result4)  # 输出: 24


# 2. 工具函数示例
class Geometry:
    @staticmethod
    def area_of_rectangle(width, height):
        """计算矩形的面积。"""
        return width * height

    @staticmethod
    def area_of_circle(radius):
        """计算圆的面积。"""
        import math
        return math.pi * (radius ** 2)


# 通过类名调用静态方法
rectangle_area = Geometry.area_of_rectangle(4, 5)
print(rectangle_area)  # 输出: 20

circle_area = Geometry.area_of_circle(3)
print(circle_area)  # 输出: 28.274333882308138
